class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        unordered_map<int, int> hash; // 定义一个哈希表
        int n = fruits.size(), len = 0;

        for(int left = 0, right = 0; right < n; right++)
        {
            hash[fruits[right]]++;    // 进窗口
            while(hash.size() > 2)
            {
                hash[fruits[left]]--;    // 出窗口
                if(hash[fruits[left]] == 0)
                    hash.erase(fruits[left]);
                left++;
            }

            len = max(len, right -left + 1);    // 更新结果
        }

        return len;
    }
};

//#################################################//
// 优化
class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        int hash[100000] = {0}; // 定义一个哈希表
        int n = fruits.size(), len = 0, kind = 0;  // 统计水果种类

        for(int left = 0, right = 0; right < n; right++)
        {
            if(hash[fruits[right]] == 0) kind++;
            hash[fruits[right]]++;    // 进窗口

            while(kind > 2)
            {
                hash[fruits[left]]--;    // 出窗口
                if(hash[fruits[left]] == 0)
                    kind--;
                left++;
            }

            len = max(len, right -left + 1);    // 更新结果
        }

        return len;
    }
};